using Godot;
using System;
using Smr.基类;
using Smr.枚举;
using System.Collections.Generic;
using Smr.接口;
using Smr;

public partial class 组件装备栏 : Control
{
    [Export] private 组件道具 法器装备;
    [Export] private 组件道具 帽子装备;
    [Export] private 组件道具 衣服装备;
    [Export] private 组件道具 鞋子装备;
    [Export] private 组件道具 腰带装备;
    [Export] private 组件道具 项链装备;
    [Export] private 组件道具 戒指装备;
    [Export] private 组件道具 手镯装备;

    private List<组件道具> 装备组 = [];

    public override void _EnterTree()
    {
        游戏管理.置组件实例("组件装备栏", this);
    }

    public override void _Ready()
    {
        装备组.Add(法器装备);
        装备组.Add(帽子装备);
        装备组.Add(衣服装备);
        装备组.Add(鞋子装备);
        装备组.Add(腰带装备);
        装备组.Add(项链装备);
        装备组.Add(戒指装备);
        装备组.Add(手镯装备);
    }

    public C装备模型 取装备栏装备(E装备部位 部位)
    {
        组件道具 道具组件 = 装备组[(int)部位];
        装备组[(int)部位].Visible = false;
        C装备模型 装备 = (C装备模型)道具组件.取道具();
        道具组件.清空组件();
        return 装备;
    }

    public void 置装备栏装备(C装备模型 装备, E装备部位 部位)
    {
        装备组[(int)部位].置道具(装备, E道具位置.装备栏);
        装备组[(int)部位].Visible = true;
    }

    public C战斗属性 取装备栏战斗属性()
    {
        C战斗属性 属性 = new();
        foreach (var 道具组件 in 装备组)
        {
            C装备模型 装备 = (C装备模型)道具组件.取道具();
            if (装备 != null)
            {
                方法.置指定对象的指定属性值
                (
                    属性, 装备.基础属性一.属性名, (float)方法.取指定对象的指定属性值(属性, 装备.基础属性一.属性名) +
                    装备.基础属性一.当前值
                );
                方法.置指定对象的指定属性值
                (
                    属性, 装备.基础属性二.属性名, (float)方法.取指定对象的指定属性值(属性, 装备.基础属性二.属性名) +
                    装备.基础属性二.当前值
                );

                foreach (var 附加属性 in 装备.附加属性)
                {
                    方法.置指定对象的指定属性值
                    (
                        属性, 附加属性.属性名, (float)方法.取指定对象的指定属性值(属性, 附加属性.属性名) +
                        附加属性.当前值
                    );
                }
            }
        }
        return 属性;
    }
}
